home *** CD-ROM | disk | FTP | other *** search
/ World of Sound / World of Sound.iso / utils / miditools / kawaied / src / print.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-10  |  13.2 KB  |  532 lines

  1. #include "inc.h"
  2. #include "defs.h"
  3. #include "zz_pointer.h"
  4. #include <ctype.h>
  5. #include <devices/printer.h>
  6. #include <hardware/cia.h>
  7.  
  8. extern int volume;
  9. extern int polymode;
  10. extern int sources;
  11. extern int ams1,ams2;
  12. extern int prsfreq;
  13. extern int vibdepth;
  14. extern int vibpres;
  15. extern int pitchbend;
  16. extern int lfospeed;
  17. extern int lfoshape;
  18. extern int kscurve;
  19. extern int vibwheel;
  20. extern int autodepth;
  21. extern int autotime;
  22. extern int autobendvel;
  23. extern int autobendks;
  24.  
  25. extern int mute[4];
  26. extern int fine[4];
  27. extern int coarse[4];
  28. extern int wave[4];
  29. extern int keytrack[4];
  30. extern int vibabend[4];
  31. extern int prsonfreq[4];
  32. extern int velcurve[4];
  33. extern int envlevel[4];
  34. extern int envdelay[4];
  35. extern int envattack[4];
  36. extern int envdecay[4];
  37. extern int envsustain[4];
  38. extern int envrelease[4];
  39. extern int levelmodvel[4];
  40. extern int levelmodprs[4];
  41. extern int levelmodks[4];
  42. extern int timemodvel[4];
  43. extern int timemodks[4];
  44. extern int freqksfreq[4];
  45.  
  46. extern int soundnr[8];
  47. extern int banknr[8];
  48. extern int zonelow[8];
  49. extern int zonehigh[8];
  50. extern int poly[8];
  51. extern int output[8];
  52. extern int mode[8];
  53. extern int rcvch[8];
  54. extern int velo[8];
  55. extern int transpose[8];
  56. extern int tune[8];
  57. extern int level[8];
  58.  
  59. extern char *ToneName[12];
  60. extern char *ModName[6];
  61. extern char *ShapeName[4];
  62. extern char *ModName[6];
  63. extern char *PolyName[3];
  64. extern char *WaveName[256];
  65.  
  66. extern struct CIA ciab;
  67. struct MsgPort *port;
  68.  
  69.  
  70. int PrintCom(UWORD);
  71. int PrintText(char *);
  72. void PrintMulti(const int nr);
  73. void PrintSingle(const int nr);
  74. BOOL OpenPrinter(void);
  75. void ClosePrinter(void);
  76.  
  77.  
  78. /**********************************************************************************/
  79. /***                                                                            ***/
  80. /**********************************************************************************/
  81.  
  82. void PrintMulti(const int nr)
  83. {
  84.     char name[10],string[255];
  85.     int i,j,bn,sn;
  86.  
  87.     SHORT r;
  88. /*    r=(ciab.ciapra &(CIAF_PRTRPOUT|CIAF_PRTRBUSY));
  89.     if (r==1)
  90.         if (!MyReq("Warning: Printer is offline","Resume","Cancel")) return(); 
  91.  
  92.     if (r==3) 
  93.         if (!MyReq("Warning: Printer is no ready","Resume","Cancel")) return();*/
  94. /*
  95. #define PrintCom(x) {if (PrintCom(x)) {MyReq("Warning: Printer trouble !",NULL,"Cancel"); ClosePrinter(); CLEAR_POINTER(win); return(); }}
  96. #define PrintText(x) {if (PrintText(x)) {MyReq("Warning: Printer trouble !",NULL,"Cancel"); ClosePrinter(); CLEAR_POINTER(win); return(); }}
  97. */
  98.     ZZ_POINTER(win);
  99.     sn=soundnr[i];
  100.     bn=banknr[i];
  101.  
  102.      for (i=0;i<=9;i++) name[i]=m[nr][i];
  103.     name[10]='\0';
  104.  
  105.     if (! OpenPrinter())
  106.     {
  107.         MyReq("Can't print multi-patch",NULL,"Go on");
  108.         CLEAR_POINTER(win);    
  109.         return();
  110.     }
  111.  
  112.     PrintCom(aSHORP0);    PrintCom(aPROP1);                 /* Normaler Zeichensatz, Prop aus */
  113.     PrintCom(aSGR1);PrintCom(aSGR4);PrintCom(aSHORP6);     /* Underline,Breit on */
  114.     sprintf(string,"\n\nMulti-Patch: %s\n\n",name);
  115.     PrintText(string);
  116.     PrintCom(aSGR22);PrintCom(aSGR24);PrintCom(aSHORP5); /* Breit, Underline aus */
  117.  
  118.     PrintCom(aSHORP2);                                     /* Elite ein */
  119.  
  120.     PrintCom(aSGR4);                                    /* Underline an */
  121.     PrintText("Name        ZoneL  ZoneH  Channel  Velo  Out  Poly  Mode  Trans  Tune  Level\n");
  122.     PrintCom(aSGR24);                                    /* Underline aus */
  123.  
  124.     for (i=0;i<=7;i++)
  125.     {   
  126.         for (j=0;j<=9;j++)
  127.         {
  128.             if (isprint(s[banknr[i]>3 ? 1 :0][soundnr[i]+8*(banknr[i]>3 ? banknr[i]-4 : banknr[i])][j]))
  129.                 name[j]=s[banknr[i]>3 ? 1 :0][soundnr[i]+8*(banknr[i]>3 ? banknr[i]-4 : banknr[i])][j];
  130.             else  name[j]=' ';
  131.         }
  132.         if (poly[i]==1) goto Ende;
  133.         name[10]='\0';
  134.         sprintf(string,"%10s",name);
  135.         PrintText(string);
  136.  
  137.         sprintf(string,"   %2s%2ld",ToneName[zonelow[i]%12],(int)(zonelow[i]/12)-2);
  138.         PrintText(string);
  139.         sprintf(string,"   %2s%2ld",ToneName[zonelow[i]%12],(int)(zonehigh[i]/12)-2);
  140.         PrintText(string);
  141.  
  142.         sprintf(string,"     %2ld",rcvch[i]+1);
  143.         PrintText(string);
  144.  
  145.         if(velo[i]==0) strcpy(string,"    All ");
  146.         if(velo[i]==1) strcpy(string,"    Soft");
  147.         if(velo[i]==2) strcpy(string,"    Loud");
  148.         PrintText(string); 
  149.  
  150.         if(output[i]==0) strcpy(string,"   R ");
  151.         if(output[i]==1) strcpy(string,"  R+L");
  152.         if(output[i]==2) strcpy(string,"   L ");
  153.         if(output[i]==3) strcpy(string,"  BYP");
  154.         PrintText(string);        
  155.  
  156.         if(poly[i]==0) strcpy(string,"   VR");
  157.                   else sprintf(string,"   %ld ",poly[i]-1);
  158.         PrintText(string);        
  159.  
  160.         if(mode[i]==0) strcpy(string,"   KEYB");
  161.         if(mode[i]==1) strcpy(string,"   MIDI");
  162.         if(mode[i]==2) strcpy(string,"   MIX ");
  163.         PrintText(string);        
  164.  
  165.         sprintf(string,"   %3ld ",transpose[i]-24);
  166.         PrintText(string);        
  167.  
  168.         sprintf(string,"   %3ld ",tune[i]-50);
  169.         PrintText(string);        
  170.  
  171.         sprintf(string,"  %3ld ",level[i]);
  172.         PrintText(string);        
  173.     
  174.         PrintText("\n");    
  175.         Ende: ;
  176.     } 
  177.  
  178.     PrintCom(aSHORP4);                    /* Condensed an */
  179.     PrintText("\nOutput by K1-II Librarian V "VERSION", (C) in 1990-92 by Andreas Jung\n\n");
  180.     PrintCom(aSHORP3);                    /* Condensed aus */
  181.  
  182. MultiEnde: ;
  183.     ClosePrinter();    
  184.     CLEAR_POINTER(win);    
  185.     return();
  186. }
  187.  
  188. /**********************************************************************************/
  189. /***                                                                            ***/
  190. /**********************************************************************************/
  191.  
  192. void PrintSingle(const int nr)
  193. {
  194.     FILE *fp,*fopen();
  195.     char name[10],string[255];
  196.     int i,j,bn,sn;
  197.     SHORT r;
  198.  
  199.     ZZ_POINTER(win);
  200.     sn=soundnr[i];
  201.     bn=banknr[i];
  202.  
  203. /*    r=(ciab.ciapra &(CIAF_PRTRPOUT|CIAF_PRTRBUSY));
  204.     if (r==1)
  205.         if (!MyReq("Warning: Printer is offline","Resume","Cancel")) 
  206.             {CLEAR_POINTER(win);return();} 
  207.  
  208.     if (r==3) 
  209.         if (!MyReq("Warning: Printer is no ready","Resume","Cancel")) 
  210.             {CLEAR_POINTER(win); return();} */
  211. /*
  212. #define PrintCom(x)  {if (PrintCom(x)) {MyReq("Warning: Printer trouble !",NULL,"Cancel"); ClosePrinter(); CLEAR_POINTER(win); return(); }}
  213. #define PrintText(x) {if (PrintText(x)) {MyReq("Warning: Printer trouble !",NULL,"Cancel"); ClosePrinter(); CLEAR_POINTER(win); return(); }}
  214. */
  215.  
  216.     for (i=0;i<=9;i++) name[i]=s[nr/32][nr%32][i];
  217.     name[10]='\0';
  218.  
  219.     if (! OpenPrinter())
  220.     {
  221.         MyReq("Can't print single-patch",NULL,"Go on");
  222.         CLEAR_POINTER(win);    
  223.         return();
  224.     }
  225.  
  226.     PrintCom(aSHORP0);    PrintCom(aPROP1);                 /* Normaler Zeichensatz, Prop aus */
  227.     PrintCom(aSGR1);PrintCom(aSGR4);PrintCom(aSHORP6);     /* Underline,Breit on */
  228.     sprintf(string,"\n\nSingle-Patch: %s\n\n",name);
  229.      PrintText(string);
  230.     PrintCom(aSGR22);PrintCom(aSGR24);PrintCom(aSHORP5); /* Breit, Underline aus */
  231.  
  232.     sprintf(string,"Volume: %3d\n\n",volume);
  233.     PrintText(string);
  234.  
  235.     PrintCom(aSGR1);                            /* Fettdruck an */
  236.     PrintText("Vibrato-LFO\t\tAuto-Bend\n");
  237.     PrintCom(aSGR22);                            /* Fettdruck aus */        
  238.  
  239.     sprintf(string,"Shape    : %s \t\tDepth   : %3d\n",ShapeName[lfoshape],autodepth-50);
  240.     PrintText(string);
  241.     sprintf(string,"Speed    : %3d\t\tTime    : %3d\n",lfospeed,autotime);
  242.     PrintText(string);
  243.     sprintf(string,"Depth    : %3d\t\tVel>Dep : %3d\n",vibdepth-50,autobendvel-50);
  244.     PrintText(string);
  245.     sprintf(string,"Prs>Depth: %3d\t\tKS>Time : %3d\n",vibpres-50,autobendks-50);
  246.     PrintText(string);
  247.     sprintf(string,"Vib wheel: %s   \tKS-Curve: %3d\n\n",vibwheel=0 ? "Depth" : "Speed",kscurve+1 );
  248.     PrintText(string);
  249.     sprintf(string,"Pitchbend: %3d\t\tS1.S2   : %s\t\tPolymode: %s\n",pitchbend,ModName[ams1],PolyName[polymode]);
  250.     PrintText(string);
  251.     sprintf(string,"Prs>Freq : %3d\t\tS3.S4   : %s\t\tSources : %d\n\n",prsfreq-50,ModName[ams2+3],2*(sources+1));
  252.     PrintText(string);
  253.  
  254.     PrintCom(aSGR1);                            /* Fettdruck an */
  255.     PrintText("Oscillators\t #1\t\t #2");
  256.     if(sources != 0) PrintText("\t\t #3\t\t #4\n");
  257.     if(sources == 0) PrintText("\n");
  258.     PrintCom(aSGR22);                            /* Fettdruck aus */        
  259.  
  260.     PrintText("Coarse:\t");
  261.         for (i=0;i<=2*(sources+1)-1;i++) 
  262.         {
  263.             if (keytrack[i]==1)
  264.             {
  265.                 sprintf(string,"\t%3d\t",coarse[i]-84);
  266.                 PrintText(string);
  267.             }
  268.             else
  269.             {    
  270.                 sprintf(string,"\t%2s%2ld\t",ToneName[coarse[i]%12],(coarse[i]/12)-4);
  271.                 PrintText(string);
  272.             }
  273.         }
  274.         PrintText("\n");
  275.  
  276.     PrintText("Fine:\t");
  277.         for (i=0;i<=2*(sources+1)-1;i++) 
  278.         {
  279.             sprintf(string,"\t%3d\t",fine[i]-50);
  280.             PrintText(string);
  281.         }
  282.         PrintText("\n");
  283.  
  284.     PrintText("Key on track:");
  285.         for (i=0;i<=2*(sources+1)-1;i++) 
  286.         {
  287.             sprintf(string,"\t%s\t",keytrack[i]==1 ? " On" : "Off");
  288.             PrintText(string);
  289.         }
  290.         PrintText("\n");
  291.  
  292.     PrintText("Vibrato\t");
  293.         for (i=0;i<=2*(sources+1)-1;i++) 
  294.         {
  295.             sprintf(string,"\t%s\t",vibabend[i]==1 ? " On" : "Off");
  296.             PrintText(string);
  297.         }
  298.         PrintText("\n");
  299.  
  300.     PrintText("Prs on freq:");
  301.         for (i=0;i<=2*(sources+1)-1;i++) 
  302.         {
  303.             sprintf(string,"\t%s\t",prsonfreq[i]==1 ? " On" : "Off");
  304.             PrintText(string);
  305.         }
  306.         PrintText("\n");
  307.  
  308.     PrintText("KS>Freq: ");
  309.         for (i=0;i<=2*(sources+1)-1;i++) 
  310.         {
  311.             sprintf(string,"\t%3d\t",freqksfreq[i]-50);
  312.             PrintText(string);
  313.         }
  314.         PrintText("\n");
  315.  
  316.     PrintText("\n");            /* Nächster Datenblock */
  317.  
  318.  
  319.     PrintText("Level:\t");
  320.         for (i=0;i<=2*(sources+1)-1;i++) 
  321.         {
  322.             sprintf(string,"\t%3d\t",envlevel[i]);
  323.             PrintText(string);
  324.         }
  325.         PrintText("\n");
  326.  
  327.     PrintText("Delay:\t");
  328.         for (i=0;i<=2*(sources+1)-1;i++) 
  329.         {
  330.             sprintf(string,"\t%3d\t",envdelay[i]);
  331.             PrintText(string);
  332.         }
  333.         PrintText("\n");
  334.      
  335.     PrintText("Attack:\t");
  336.         for (i=0;i<=2*(sources+1)-1;i++) 
  337.         {
  338.             sprintf(string,"\t%3d\t",envattack[i]);
  339.             PrintText(string);
  340.         }
  341.         PrintText("\n");
  342.  
  343.     PrintText("Decay:\t");
  344.         for (i=0;i<=2*(sources+1)-1;i++) 
  345.         {
  346.             sprintf(string,"\t%3d\t",envdecay[i]);
  347.             PrintText(string);
  348.         }
  349.         PrintText("\n");
  350.  
  351.     PrintText("Sustain:");
  352.         for (i=0;i<=2*(sources+1)-1;i++) 
  353.         {
  354.             sprintf(string,"\t%3d\t",envsustain[i]);
  355.             PrintText(string);
  356.         }
  357.         PrintText("\n");
  358.      
  359.     PrintText("Release:");
  360.         for (i=0;i<=2*(sources+1)-1;i++) 
  361.         {
  362.             sprintf(string,"\t%3d\t",envrelease[i]);
  363.             PrintText(string);
  364.         }
  365.         PrintText("\n");
  366.  
  367.      PrintText("Vel-Curve:");
  368.         for (i=0;i<=2*(sources+1)-1;i++) 
  369.         {
  370.             sprintf(string,"\t%3d\t",velcurve[i]+1);
  371.             PrintText(string);
  372.         }
  373.         PrintText("\n");
  374.  
  375.     PrintText("Level>Vel: ");
  376.         for (i=0;i<=2*(sources+1)-1;i++) 
  377.         {
  378.             sprintf(string,"\t%3d\t",levelmodvel[i]-50);
  379.             PrintText(string);
  380.         }
  381.         PrintText("\n");
  382.      
  383.     PrintText("Level>Prs: ");
  384.         for (i=0;i<=2*(sources+1)-1;i++) 
  385.         {
  386.             sprintf(string,"\t%3d\t",levelmodprs[i]-50);
  387.             PrintText(string);
  388.         }
  389.         PrintText("\n");
  390.      
  391.     PrintText("Level>KS: ");
  392.         for (i=0;i<=2*(sources+1)-1;i++) 
  393.         {
  394.             sprintf(string,"\t%3d\t",levelmodks[i]-50);
  395.             PrintText(string);
  396.         }
  397.         PrintText("\n");
  398.      
  399.     PrintText("Time>Vel: ");
  400.         for (i=0;i<=2*(sources+1)-1;i++) 
  401.         {
  402.             sprintf(string,"\t%3d\t",timemodvel[i]-50);
  403.             PrintText(string);
  404.         }
  405.         PrintText("\n");
  406.      
  407.     PrintText("Time>KS: ");
  408.         for (i=0;i<=2*(sources+1)-1;i++) 
  409.         {
  410.             sprintf(string,"\t%3d\t",timemodks[i]-50);
  411.             PrintText(string);
  412.         }
  413.         PrintText("\n");
  414.  
  415.     PrintText("\n");            /* Nächster Datenblock */
  416.  
  417.  
  418.     PrintText("Mute:\t");
  419.         for (i=0;i<=2*(sources+1)-1;i++) 
  420.         {
  421.             sprintf(string,"\t%s\t",mute[i]==1 ? "Off" : " On");
  422.             PrintText(string);
  423.         }
  424.         PrintText("\n");
  425.  
  426.     PrintText("Waveform:");
  427.         for (i=0;i<=2*(sources+1)-1;i++) 
  428.         {
  429.             sprintf(string,"\t%3d\t",wave[i]+1);
  430.             PrintText(string);
  431.         }
  432.         PrintText("\n");
  433.         for (i=0;i<=2*(sources+1)-1;i++) 
  434.         {
  435.             sprintf(string,"\t%15s",WaveName[wave[i]]);
  436.             PrintText(string);
  437.         }
  438.         PrintText("\n");
  439.      
  440.     PrintCom(aSHORP4);                    /* Condensed an */
  441.     PrintText("\nOutput by K1-II Librarian V "VERSION", (C) in 1990-92 by Andreas Jung\n\n");
  442.     PrintCom(aSHORP3);                    /* Condensed aus */
  443.  
  444. SingleEnde: ;
  445.     ClosePrinter();
  446.     CLEAR_POINTER(win);
  447.     return();
  448. }
  449.  
  450. #undef PrintCom
  451. #undef PrintText
  452.  
  453. /**********************************************************************************/
  454. /***                                                                            ***/
  455. /**********************************************************************************/
  456.  
  457. int PrintCom(UWORD com)
  458. {
  459.     struct IOPrtCmdReq prefreq;
  460.     int error;
  461.  
  462.     error=OpenDevice("printer.device",0,&prefreq,0);
  463.     if (error != NULL)
  464.     {
  465.         DeletePort(port);
  466.         return();
  467.     }
  468.  
  469.     prefreq.io_Message.mn_ReplyPort    =port;
  470.     prefreq.io_Command                =PRD_PRTCOMMAND;
  471.     prefreq.io_PrtCommand            =com;
  472.     prefreq.io_Parm0                =0;
  473.     prefreq.io_Parm1                =0;
  474.     prefreq.io_Parm2                =0;
  475.     prefreq.io_Parm3                =0;
  476.  
  477.     error=DoIO(&prefreq);
  478.     CloseDevice(&prefreq);
  479.     return(error);
  480. }
  481.  
  482. /**********************************************************************************/
  483. /***                                                                            ***/
  484. /**********************************************************************************/
  485.  
  486. int PrintText(char *str)
  487. {
  488.     struct IOStdReq    prreq;
  489.     int error;
  490.  
  491.     error=OpenDevice("printer.device",0,&prreq,0);
  492.     if (error != NULL)
  493.     {
  494.         DeletePort(port);
  495.         return();
  496.     }
  497.  
  498.     prreq.io_Message.mn_ReplyPort    = port;
  499.     prreq.io_Command                = CMD_WRITE;
  500.     prreq.io_Data                    = (APTR)&str[0];
  501.     prreq.io_Length                    = strlen(str);
  502.  
  503.     error=DoIO(&prreq);
  504.     CloseDevice(&prreq);
  505.     return(error);
  506. }
  507.  
  508. /**********************************************************************************/
  509. /***                                                                            ***/
  510. /**********************************************************************************/
  511.  
  512. BOOL OpenPrinter(void)
  513. {
  514.     int error;
  515.     struct IOStdReq    prreq;
  516.  
  517.     port=(struct MsgPort *) CreatePort("K1-II printer port",0);
  518.     if (port == NULL)    return(FALSE);
  519.  
  520.     if (!Exists("devs:printer.device"))    return(FALSE);
  521.     return(TRUE);
  522. }
  523.  
  524. /**********************************************************************************/
  525. /***                                                                            ***/
  526. /**********************************************************************************/
  527.  
  528. void ClosePrinter(void)
  529. {
  530.     DeletePort(port);
  531. }
  532.